"""
微信告警推送系统主程序入口
"""
import sys
import os
import time
import threading
import argparse
import logging
import datetime

# 添加项目根目录到系统路径
current_dir = os.path.dirname(os.path.abspath(__file__))
root_dir = os.path.dirname(current_dir)
sys.path.append(root_dir)

from src.utils.config import config_manager
from src.utils.logger import logger
from src.ui.main_window import get_instance
from src.wechat.login import wechat_login
from src.scheduler.tasks import task_scheduler
import pywinauto
from pywinauto.findwindows import find_window
from pywinauto import Desktop
import pythoncom

# 添加自动关闭警告对话框的功能
def close_warning_dialog():
    """自动关闭可能出现的警告对话框"""
    # 首先等待一段时间，让程序完全启动
    time.sleep(10)
    
    logger.info("开始监控警告对话框...")
    
    # 监控时间为2分钟，每5秒检查一次
    monitor_duration = 120  # 2分钟
    check_interval = 5      # 5秒
    
    start_time = time.time()
    end_time = start_time + monitor_duration
    
    while time.time() < end_time:
        try:
            # 初始化COM环境
            pythoncom.CoInitialize()
            
            try:
                found_dialog = False
                
                # 尝试查找并关闭标题为"Warning"的对话框
                try:
                    warning_dlg = Desktop(backend="uia").window(title="Warning")
                    if warning_dlg.exists():
                        logger.info(f"检测到Warning对话框，正在自动关闭...")
                        # 点击确定按钮
                        warning_dlg.child_window(title="确定").click()
                        logger.info("Warning对话框已关闭")
                        found_dialog = True
                except Exception as e:
                    # 只在调试级别记录这个错误，避免日志过多
                    logger.debug(f"查找Warning对话框失败: {e}")
                
                # 尝试查找并关闭标题为"警告"的对话框
                try:
                    warning_dlg = Desktop(backend="uia").window(title="警告")
                    if warning_dlg.exists():
                        logger.info(f"检测到警告对话框，正在自动关闭...")
                        # 点击确定按钮
                        warning_dlg.child_window(title="确定").click()
                        logger.info("警告对话框已关闭")
                        found_dialog = True
                except Exception as e:
                    # 只在调试级别记录这个错误，避免日志过多
                    logger.debug(f"查找警告对话框失败: {e}")
                
                # 如果找到并关闭了对话框，继续监控一段时间，以防有多个对话框
                if found_dialog:
                    logger.info("成功关闭对话框，继续监控...")
                
            finally:
                # 释放COM环境
                pythoncom.CoUninitialize()
            
        except ImportError:
            logger.warning("未安装pywinauto库，无法自动关闭警告对话框")
            break
        except Exception as e:
            logger.error(f"自动关闭警告对话框时出错: {e}")
        
        # 等待一段时间再次检查
        time.sleep(check_interval)
    
    logger.info("警告对话框监控结束")


def auto_start_monitor():
    """自动启动监控"""
    try:
        # 检查微信是否已登录
        from src.wechat.login import wechat_login
        if not wechat_login.is_logged_in:
            logger.warning("微信未登录，无法自动启动监控")
            return False
        
        # 启动调度器
        if task_scheduler.start():
            logger.info("监控已自动启动")
            # 更新主窗口状态
            main_window = get_instance()
            main_window.update_monitor_status(True)
            return True
        else:
            logger.error("自动启动监控失败")
            return False
    except Exception as e:
        logger.error(f"自动启动监控异常: {e}")
        return False

if __name__ == "__main__":
    try:
        # 初始化日志
        logger.info("启动微信告警推送系统")
        
        # 检查是否是自动重启的实例
        is_auto_restarted = "--auto-restarted" in sys.argv
        if is_auto_restarted:
            logger.info("检测到程序是通过自动重启机制启动的")
            
            # 启动线程自动关闭警告对话框
            warning_thread = threading.Thread(target=close_warning_dialog)
            warning_thread.daemon = True
            warning_thread.start()
            logger.info("已启动警告对话框监控线程")

        
        # 检查配置文件
        if not os.path.exists(config_manager.config_file):
            logger.warning(f"配置文件不存在: {config_manager.config_file}, 将创建默认配置")
            config_manager.create_default_config()
        
        # 启用自动重启机制
        auto_restart_enabled = config_manager.get_value("scheduler", "auto_restart_enabled", True)
        if auto_restart_enabled:
            # 获取当前时间，用于测试
            now = datetime.datetime.now()
            restart_time = config_manager.get_value("scheduler", "restart_time", "03:00")
            logger.info(f"当前时间: {now.strftime('%H:%M:%S')}, 计划重启时间: {restart_time}")
            
            # 设置自动重启
            success = task_scheduler.setup_auto_restart()
            if success:
                logger.info("已启用自动重启机制")
            else:
                logger.error("启用自动重启机制失败")
        
        # 启动主窗口
        main_window = get_instance()
        
        # 检查是否需要自动启动监控
        auto_start_enabled = config_manager.get_value("scheduler", "auto_start_monitor", True)
        if auto_start_enabled:
            logger.info("检测到自动启动监控配置，尝试启动监控...")
            # 延迟一段时间，确保微信登录检查完成
            main_window.root.after(5000, auto_start_monitor)
        
        # 运行主循环
        main_window.run()
    except Exception as e:
        logger.error(f"程序运行异常: {e}", exc_info=True)
        sys.exit(1) 